8
תגובות
הוספה למערך במחלקה
פתח
משהה
,
יש לי במחלקה, מערך private. הרעיון בו הוא לשמור שורות של פקודות SQL.
עכשיו, כשאני מנסה לעשות :
במתודה כלשהיא, או אפילו במתודה נפרדת - זה לא עובד.
אבל בקונסטרקטור זה דווקא עובד מעולה (:
הקונסטרקטור שלי הוא כזה למקרה שזה משנה:
מה הבעיה? למה זה קורה?
עכשיו, כשאני מנסה לעשות :
array_push($this->queryStored,$this->queryString);
במתודה כלשהיא, או אפילו במתודה נפרדת - זה לא עובד.
אבל בקונסטרקטור זה דווקא עובד מעולה (:
הקונסטרקטור שלי הוא כזה למקרה שזה משנה:
public function __construct(Database $__instance) {
$this->queryString = '';
$this->queryStored = array();
// array_push($this->queryStored,3);
// array_push( $this->queryStored , $this->queryString );
$this->instance = $__instance;
}
$this->queryString = '';
$this->queryStored = array();
// array_push($this->queryStored,3);
// array_push( $this->queryStored , $this->queryString );
$this->instance = $__instance;
}
מה הבעיה? למה זה קורה?
8 תשובות
יכול להיות הרבה דברים, בלי קוד אני לא חושב שמישהו יהיה מסוגל לעזור לך - תדביק פה את המחלקה ונראה מה הבעיה..
הנה המחלקה לביצוע שאילתות:
http://pastebin.com/B6mdqKU7
והזאת המחלקה הראשית של יצירת קשר עם הDB:
http://pastebin.com/a5VpTcWb
מקווה שזה יעזור(: תודה
אין שום בעיה במחלקה, אבל אני לא רואה קריאה ל
SQLStatement::stored()
בשום מקום, אם אתה מנסה לגשת מחוץ לסקופ של המחלקה אין סיבה שזה יעבוד - המטודה פרטית..
עשיתי ניסוי כזה:
$db->prepareQuery()->select()->from('test')->stored();
$db->prepareQuery()->select()->from('moshe')->stored();
$db->prepareQuery()->select()->from('nagar')->stored();
$b = $db->prepareQuery()->getStored();
print_r($b);
$db->prepareQuery()->select()->from('moshe')->stored();
$db->prepareQuery()->select()->from('nagar')->stored();
$b = $db->prepareQuery()->getStored();
print_r($b);
שזה אומר - שלוש שורות שמכינות שאילתות - המתודה prepareQuery מחזירה מופע של SQLStatement - ושומרת אותם ע"י המתודה stored(שיניתי אותה לpublic, היא הייתה private כי ניסיתי לקרוא לה דרך from כדי לבדוק אולי יש בעיה בקריאה למתודה).
אחרי זה אני שומר במשתנה b את המערך שבו שמרתי את השאילתות ע"י stored(או יותר נכון, הייתי אמור).
ואז אני מדפיס את המערך .
התוצאה היא :
Array ( )
... זה מציג לי את המערך כמערך ריק ! למרות שהשתמשתי בstored.. =/
ברור שהמערך יהיה ריק, ב
Database::prepareQuery()
אתה מחזיר מופע חדש של המחלקה SQLStatement,
$queryStored שייך למופע ולא למחלקה, אם אתה רוצה שהוא יהיה שייך למחלקה תגדיר אותו כסטטי.
אם לא הבנת מה אני אומר תנסה את הקוד הזה:
$query1 = $db->prepareQuery();
$query1->select()->from('test')->stored();
$stored1 = $query1->getStored();
var_dump($stored1); // prints array with 1 element
$query2 = $db->prepareQuery();
$stored2 = $query2->getStored();
var_dump($stored); // prints empty array
$query1->select()->from('test')->stored();
$stored1 = $query1->getStored();
var_dump($stored1); // prints array with 1 element
$query2 = $db->prepareQuery();
$stored2 = $query2->getStored();
var_dump($stored); // prints empty array
כדי לשמור את השאילתות האחרונות את יכול לעשות שתי דברים:
להגדיר את המערך* $queryStored כסטטי או
להעביר את המערך* $queryStored למחלקה Database
לשתיהן יש חסרונות ויתרונות, אני הייתי הולך על האופציה השניה ובמקום לשמור את השאילתות כמחרוזות* הייתי שומר את המופעים של SQLStatement.
משהו כזה:
<?php
class Database
{
protected $queryStored = array();
public function prepareQuery()
{
$query = new SQLStatement($this);
array_push($this->queryStored, $query);
return $query;
// *OR* just :
return $this->queryStored[] = new SQLStatement($this);
}
// this function just for demonstration, i.e. you can get rid of it..
public function getLastQuery()
{
return end($this->queryStored);
}
public function getQueryStored()
{
return $this->queryStored;
}
}
class Database
{
protected $queryStored = array();
public function prepareQuery()
{
$query = new SQLStatement($this);
array_push($this->queryStored, $query);
return $query;
// *OR* just :
return $this->queryStored[] = new SQLStatement($this);
}
// this function just for demonstration, i.e. you can get rid of it..
public function getLastQuery()
{
return end($this->queryStored);
}
public function getQueryStored()
{
return $this->queryStored;
}
}
-------
מערך = array
מחרוזת = string